"use strict";
//泛型
// 泛型允许我们在定义函数、类或接⼝时，使⽤类型参数来表示未指定的类型，这些参数在具体
// 使⽤时，才被指定具体的类型，泛型能让同⼀段代码适⽤于多种类型，同时仍然保持类型的安
// 全性。
// 举例：如下代码中 <T> 就是泛型，（不⼀定⾮叫 T ），设置泛型后即可在函数中使⽤ T 来表
// 示该类型：
//泛型函数
function logData(data) {
    console.log(data);
}
logData(123);
logData("123");
logData(false);
// console.log(Date.now())
//泛型可以有多个 
function logData2(data, data2) {
    return Date.now() % 2 ? data : data2;
}
logData2(123, false);
logData2(666, '123');
var p1 = {
    name: '123',
    age: 123,
    extraInfo: 123
};
var p2 = {
    name: '123',
    age: 123,
    extraInfo: {
        title: '123',
        company: '123'
    }
};
//泛型类 
var Person11 = /** @class */ (function () {
    function Person11(name, age, extraInfo) {
        this.name = name;
        this.age = age;
        this.extraInfo = extraInfo;
    }
    Person11.prototype.speack = function () {
        console.log("\u6211\u53EB".concat(this.name, "\u4ECA\u5E74").concat(this.age, "\u5C81\u4E86"));
        console.log(this.extraInfo);
    };
    return Person11;
}());
// 测试代码1
var p11 = new Person11('123', 123, 123);
p11.speack();
// interface Jobinfo2 {
//     title: string,
//     company: string
// }
// 测试代码2
var p12 = new Person11('123', 123, { title: '123', company: '123' });
p12.speack();
// 约束规则是：传⼊的类型T必须具有 length 属性
function logPerson(data) {
    console.log(data.length);
}
logPerson('hello');
// 报错：因为number不具备length属性
// logPerson<number>(100)
